import { createApp } from "vue";
import { createPinia } from "pinia";
import ElementPlus from "element-plus";
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
import "element-plus/dist/index.css";

import App from "./App.vue";
import router from "./router";
import { useUserStore } from "./stores/user";
import i18n from "./i18n";
import "./styles/index.scss";

// 初始化Toast服务
import { toast } from "@/utils/toast";

// 创建应用实例
const app = createApp(App);

// 添加图标组件
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component);
}

// 创建 Pinia 实例
const pinia = createPinia();

// 挂载 Pinia
app.use(pinia);

// 初始化用户状态（在路由挂载前）
const userStore = useUserStore();

// 异步初始化应用
async function initApp() {
  try {
    // 等待用户状态初始化完成
    await userStore.initUser();
  } catch (error) {
    console.error("用户状态初始化失败:", error);
  }

  // 挂载其他插件
  app.use(router);
  app.use(ElementPlus, {
    // 全局配置Element Plus消息
    message: {
      max: 3, // 最多显示3个消息
    },
  });
  app.use(i18n);

  // 挂载应用
  app.mount("#app");

  // 初始化Toast服务
  toast.init();
}

// 启动应用
initApp();
